package com.jecs.bean;


import org.wlld.config.SentenceConfig;
import org.wlld.naturalLanguage.word.MyKeyWord;
import org.wlld.naturalLanguage.word.WordEmbedding;
import org.wlld.rnnNerveCenter.RandomNerveManager;
import com.jecs.config.FreeWord;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.wlld.naturalLanguage.languageCreator.CatchKeyWord;

import java.util.*;

/**
 * @param
 * @DATA
 * @Author LiDaPeng
 * @Description
 */
@Configuration
public class BeanMangerOnly {//需要单例的类

    @Bean
    public SentenceConfig getConfig() {//配置文件
        SentenceConfig sentenceConfig = new SentenceConfig();
        sentenceConfig.setMaxWordLength(15);//语言长度 越长越好，但是越长需求的数据量越大，计算时间越长性能越差，也需要更多的内存。
        sentenceConfig.setRandomNumber(11);//奇数，小于语言长度 越接近越好，这个越大内存越大，性能降低
        sentenceConfig.setNerveDeep(6);//单网络深度 长度1/3 -长度1/2
        sentenceConfig.setTopNumber(1);//选取最近似理解结果种类数 一句话 可能有多种语义，会选取最可能的条数
        sentenceConfig.setDateAug(6000);//数据增广数量 数量越大 支撑的语言长度越长，训练时间越久
        return sentenceConfig;
    }

    @Bean
    public List<String> getFreeWord() {
        return new ArrayList<>(Arrays.asList(FreeWord.keyWord));
    }

    @Bean
    public WordEmbedding getWordEmbedding() {//词向量嵌入器（word2Vec）
        //中文语句 你，我，他，好 文字 是 离散的高维特征->离散特征连续化 并降维 [0.223,0.123,0.122334 ....]
        return new WordEmbedding(getConfig());
    }

    @Bean
    public RandomNerveManager getRandomNerveManager() throws Exception {//语义理解模型
        return new RandomNerveManager(getConfig(), getWordEmbedding());
    }

    @Bean//关键词抓取类
    public Map<Integer, CatchKeyWord> catchKeyWord() {//关键词抓取
        return new HashMap<>();
    }
    @Bean
    public MyKeyWord getMyKeyWord() throws Exception {//关键词敏感性嗅探
        return new MyKeyWord(getConfig(), getWordEmbedding());
    }

}
